package fiuba.algo3.controlador;


import fiuba.algo3.caso.OrdenDeArresto;
import fiuba.algo3.mundo.Pais;
import fiuba.algo3.Partida;
import fiuba.algo3.Sospechoso;
import fiuba.algo3.vista.Vista;
import java.util.Scanner;

public class ControladorTeclado implements Controlador {
	
	Scanner s;
	
	public ControladorTeclado()
	{
		s = new Scanner(System.in);
	}
	
	public String recibirNombreJugador()
	{
		String nombre = s.nextLine();
		
		return nombre;
	}

	public void recibirComandoPrincipal(Vista vista, Partida partida)
	{
		boolean salir = false;
		
		
		int eleccion = s.nextInt();
		s.nextLine();
		
		switch(eleccion)
			{
			case 1: this.recibirComandoInvestigacion(partida, vista);
					break;
			case 2: vista.mostrarOpcionesViajar(partida);
					this.recibirComandoViajar(partida, vista);
					break;		
			case 3: 			
					while(salir == false)
					{
						vista.mostrarOpcionesInterpol(partida);
						salir = this.recibirComandoInterpol(vista, partida);
					}
					break;
		
			}
	}

	@Override
	public void recibirComandoViajar(Partida partida, Vista vista)
	{
		Pais[] listaPaises = partida.obtenerPaisesConectados();

		int eleccion = s.nextInt();
		s.nextLine();

		if ((eleccion >= 1) && (eleccion <= listaPaises.length))
		{
			partida.irHasta(listaPaises[eleccion-1]);
		}
		else
		{
			System.out.println("Opcion invalida");
		}					
	}

	@Override
	public void recibirComandoInvestigacion(Partida partida, Vista vista)
	{
		int eleccion;
		boolean salida = false;
	
		while ((!salida) && !partida.perdioPartida() && !partida.ganoPartida())
		{
			vista.mostrarOpcionesInvestigacion(partida);
			
			eleccion = s.nextInt();
			s.nextLine();
			switch(eleccion)
			{
				case 1:
					vista.mostrarPista(partida.entrarEnBiblioteca());
					break;
				case 2:
					vista.mostrarPista(partida.entrarEnLugarEconomia());
					break;
				case 3:
					vista.mostrarPista(partida.entrarEnLugarViajes());
					break;

				default:
					salida = true;
			}
		}
	}
	
	
	
	public boolean recibirComandoInterpol(Vista vista, Partida partida)
	{
		int eleccion = s.nextInt();
		s.nextLine();

		switch(eleccion)
			{
			case 1: vista.mostrarOpcionesSexo();
					this.recibirComandoSexo();
					break;
			case 2: vista.mostrarOpcionesHobby();
					this.recibirComandoHobby();
					break;
			case 3: vista.mostrarOpcionesCabello();
					this.recibirComandoCabello();
					break;
			case 4: vista.mostrarOpcionesSenia();
					this.recibirComandoSenia();
					break;
			case 5: vista.mostrarOpcionesVehiculo();
					this.recibirComandoVehiculo();
					break;

			case 6: Sospechoso[] lista = partida.generarListaDeSospechosos();
					vista.mostrarListaDeSospechosos(lista);
					this.recibirOK(vista);
					break;

			case 7: return true;
			}

		return false;
	}

	private void recibirComandoVehiculo()
	{
		int eleccion = s.nextInt();
		s.nextLine();
			
		switch(eleccion)
			{
		case 1: OrdenDeArresto.seleccionarVehiculo("convertible");
				break;
		case 2: OrdenDeArresto.seleccionarVehiculo("limusina");
				break;
		case 3: OrdenDeArresto.seleccionarVehiculo("moto");
				break;
			}
	}

	private void recibirComandoSenia()
	{
		int eleccion = s.nextInt();
		s.nextLine();
		switch(eleccion)
		{

		case 1: OrdenDeArresto.seleccionarSenia("joyas");
				break;
		case 2: OrdenDeArresto.seleccionarSenia("tatuaje");
				break;
		case 3: OrdenDeArresto.seleccionarSenia("anillo");
				break;
		}
	}

	private void recibirComandoCabello()
	{
		int eleccion = s.nextInt();
		s.nextLine();

		switch(eleccion)
		{
		case 1: OrdenDeArresto.seleccionarCabello("negro");
				break;
		case 2: OrdenDeArresto.seleccionarCabello("rojo");
				break;
		case 3: OrdenDeArresto.seleccionarCabello("rubio");
				break;
		}
	}

	private void recibirComandoHobby()
	{
		int eleccion = s.nextInt();
		s.nextLine();
		switch(eleccion)
		{
		case 1: OrdenDeArresto.seleccionarHobby("tenis");
		break;
		case 2: OrdenDeArresto.seleccionarHobby("alpinismo");
		break;
		case 3: OrdenDeArresto.seleccionarHobby("croquet");
		break;
		}
	}

	private void recibirComandoSexo()
	{
		int eleccion = s.nextInt();
		s.nextLine();

		switch(eleccion)
		{
			case 1: OrdenDeArresto.seleccionarSexo("masculino");
			break;
			case 2: OrdenDeArresto.seleccionarSexo("femenino");
			break;
		}
	}
	

	@Override
	public void recibirOK(Vista v) {
		
		
//		System.out.println("Presione Enter para continuar");
//			
//			String enter;
//			
//				do
//				{
//
//					enter = s.nextLine();
//					
//				}while(enter != "\n");
			
			
		
	}

	@Override
	public boolean recibirComandoFinDePartida() {
		int eleccion = s.nextInt();
		s.nextLine();

		switch(eleccion)
		{
			case 1: return true; //Volver a jugar
			case 2: return false;	//Salir del juego
			default: return false;
		}
	}
		
}
